docker搭建mysql8.0主备(主从复制)

您所在的位置:网站首页 mysql 主从 主备 区别 docker搭建mysql8.0主备(主从复制)

docker搭建mysql8.0主备(主从复制)

2024-07-12 05:36| 来源: 网络整理| 查看: 265

目录 前言1. 拉取mysql8.0.25镜像2. 启动mysql容器3. 修改配置文件4. 进入主容器mysql5. 进入从容器mysql6. 测试主从复制效果*注意事项:*

前言

由于最近项目中开始要用到mysql主备模式,所以赶紧去mysql官网学习下,尝试用docker搭建一个mysql主备(一主一从),启动两台容器来模拟两台服务器,原理和在两台服务器上搭建主备是一样的,需要注意的是,不管是两个容器还是两台linux服务器之间必须要能够相互通信的,否则搭建主备无法完成

1. 拉取mysql8.0.25镜像

下面使用的是mysql8.0.25版本镜像(docker官网的镜像,应该是比较新的)

docker pull mysql:8.0.25

在这里插入图片描述

2. 启动mysql容器

启动两台容器,一主一从,docker ps检查两台容器的运行状态,如下所示表示启动运行正常

--ip是用来指定容器启动过程中的ip地址,如果不指定,每次启动容器ip地址不固定,这样就会导致第一次搭建好的mysql主从复制在容器重启后无法组成主从复制了,因为主机容器的ip变了,从机容器无法连接到主机容器,所以这里才需要指定,一旦指定ip后,不管什么时候重启容器,容器的ip地址不会再发生变化 docker run -d --name mainer -p 8008:3306 -e MYSQL_ROOT_PASSWORD=root --ip 10.88.0.13 mysql:8.0.25 docker run -d --name follower -p 8009:3306 -e MYSQL_ROOT_PASSWORD=root --ip 10.88.0.14 mysql:8.0.25

在这里插入图片描述

3. 修改配置文件

(1)编辑主容器my.cnf

将容器中的mysql配置文件my.cnf复制到宿主机 docker cp 8b7d5c7a7903:/etc/mysql/my.cnf ./ =========================================== vim my.cnf 在[mysqld]加上下面两行 log-bin=mysql-bin server-id=1 =========================================== 将编辑好的my.cnf配置文件放回容器中 docker cp ./my.cnf 8b7d5c7a7903:/etc/mysql 重启mysql主容器 docker restart 8b7d5c7a7903

在这里插入图片描述 (2)查看主容器my.cnf文件

docker exec -it mainer /bin/bash cat /etc/mysql/my.cnf

(3)编辑从容器my.cnf

将容器中的mysql配置文件my.cnf复制到宿主机 docker cp a7edc962301f:/etc/mysql/my.cnf ./ =========================================== vim my.cnf 在[mysqld]加上下面两行 log-bin=mysql-bin server-id=2 =========================================== 将编辑好的my.cnf配置文件放回容器中 docker cp ./my.cnf a7edc962301f:/etc/mysql 重启mysql从容器 docker restart a7edc962301f

在这里插入图片描述 (4)查看从容器my.cnf文件

docker exec -it follower /bin/bash cat /etc/mysql/my.cnf 4. 进入主容器mysql docker exec -it mainer /bin/bash mysql -u root -p 进入mysql,执行以下命令: CREATE USER 'jamy'@'%' IDENTIFIED WITH mysql_native_password BY 'jamy'; GRANT REPLICATION SLAVE ON *.* TO 'jamy'@'%'; 5. 进入从容器mysql 查看主容器Ip docker inspect 8b7d5c7a7903 得到主容器IP:10.88.0.13 ============================================= docker exec -it a7edc962301f /bin/bash mysql -u root -p 进入mysql执行以下命令: CHANGE MASTER TO MASTER_HOST='10.88.0.13', MASTER_PORT=3306, MASTER_USER='jamy', MASTER_PASSWORD='jamy', master_log_file='mysql-bin.000001', master_log_pos=542; Or from MySQL 8.0.23: //mysql8.0.23以后用下面这个命令 CHANGE REPLICATION SOURCE TO SOURCE_HOST='10.88.0.13', SOURCE_PORT=3306, SOURCE_USER='jamy', SOURCE_PASSWORD='jamy'; ============================================ mysql> START SLAVE; mysql> SHOW SLAVE STATUS\G Or from MySQL 8.0.22: //mysql8.0.22以后用下面的 mysql> START REPLICA; mysql> SHOW REPLICA STATUS\G //查看主从状态

如下图所示这样说明mysql主从复制搭建成功!如果此处出现下面这样,请参考文章末尾的注意事项中的解决方法

Slave_IO_Running: connecting Slave_SQL_Running: Yes

在这里插入图片描述

6. 测试主从复制效果

进入主机mysql创建数据库

create database test default charset utf8mb4; show databases;

在这里插入图片描述 进入从机mysql查看数据库 show databases; 在这里插入图片描述 到此mysql主从复制搭建成功!

注意事项:

1、首先执行下面命令查询下身份验证插件到底是哪一个?

use mysql; select user,host,plugin from user;

2、如果复制用户的身份验证插件是:caching_sha2_password,则需要指定GET_MASTER_PUBLIC_KEY=1;

CHANGE MASTER TO MASTER_HOST='10.88.0.15', MASTER_PORT=3306, MASTER_USER='root', MASTER_PASSWORD='root', master_log_file='mysql-bin.000001', master_log_pos=552, master_connect_retry=60, GET_MASTER_PUBLIC_KEY=1;

3、如果复制用户的身份验证插件是:mysql_native_password,则不需要指定GET_MASTER_PUBLIC_KEY=1;

CHANGE MASTER TO MASTER_HOST='10.88.0.15', MASTER_PORT=3306, MASTER_USER='root', MASTER_PASSWORD='root', master_log_file='mysql-bin.000001', master_log_pos=552;


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3